Console   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 30
rs 10
c 0
b 0
f 0
wmc 4

2 Functions

Rating   Name   Duplication   Size   Complexity  
A log 0 17 3
A constructor 0 10 1
1
/* eslint-disable promise/prefer-await-to-callbacks */
2
import os from 'os';
3
import Transport from 'winston-transport';
4
import { isLoggable } from './utils/common';
5
import { defaultLogger, defaultSanitizer, defaultMaxListeners } from './defaults';
6
import { MESSAGE, LEVEL } from './constants';
7
8
export default class Console extends Transport {
9
    constructor(options = {}) {
10
        super(options);
11
        this.name = options.name || 'console';
12
        this.eol = options.eol || os.EOL;
13
        this.logger = options.logger || console;
14
        this.fallBackLogger = options.fallBackLogger || defaultLogger;
15
        this.handlers = options.levels || {};
16
        this.sanitizer = options.sanitizer || defaultSanitizer;
17
        this.setMaxListeners(options.maxListeners || defaultMaxListeners);
18
    }
19
20
    log(info, callback) {
21
        setImmediate(() => {
22
            this.emit('logged', info);
23
        });
24
        const level = info[LEVEL];
25
        const message = info[MESSAGE];
26
27
        const log = [
28
            this.handlers[level],
29
            this.logger[this.handlers[level]],
30
            this.logger[level],
31
            this.fallBackLogger
32
        ].find((element) => isLoggable(element));
33
34
        log(this.sanitizer(message));
35
        callback();
36
    }
37
}
38